﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace ViewRidgeAssistant
{
    public partial class form_artist : Form
    {
        private data_source _data_module;
        private string _state;
        private string _id;

        //Конструктор, вызываемый при нажатии "добавить"
        public form_artist(data_source data_module)
        {
            InitializeComponent();
            this._data_module = data_module;
            this.set_state("NEW");
            this.fill_combo_years();
        }

        //Конструктор, вызываемый при нажатии "редактировать"
        public form_artist(data_source data_module, int id)
        {
            InitializeComponent();
            this._id = id.ToString();
            this._data_module = data_module;
            this.fill_artist_data();
            this.set_state("OLD");
            this.fill_combo_years();
            //this.update_works_list();
            //this.Show();
        }

        public void fill_combo_years()
        {
            this.comb_bd_date.Items.Clear();
            this.comb_dd_date.Items.Clear();
            for (int i = 1200; i < 1900; i++)
            {
                this.comb_bd_date.Items.Add(i);
                this.comb_dd_date.Items.Add(i);
            }
        }

        //получение из базы информации о художнике и заполнению соотв. полей формы
        public void fill_artist_data()
        {
            class_artist artist;
            artist = this._data_module.get_artist(Convert.ToInt32(this._id));
            if (artist.result == "OK")
            {
                this.t_name.Text = artist.artist_name;
                this.t_nat.Text = artist.nationality;
                this.comb_bd_date.Text = artist.birthdate;
                this.comb_dd_date.Text = artist.dc_date;
            }
            else
            {
                MessageBox.Show(artist.result);
                this.Dispose();
            }
        }

        //Обработчик событий изменения какого-либо поля -- переход формы в режим "MOD" и активация
        //возможностей сохранения
        private void enabled_b_save(object sender, EventArgs e)
        {
            //this.b_delete.Enabled = false;
            this.l_status.Text = "Запись изменена";
            this.b_save.Enabled = true;
            if (this._state == "OLD") { this.set_state("MOD"); };
        }

        //Установка указанного состояния (изменение соотв. параметров формы)
        public void set_state(string state)
        {
            switch (state)
            {
                case "NEW":
                this._state = "NEW";
                this.Text = "Художник - Добавление";
                //this.comb_dd_date.Enabled = false;
                this.b_save.Enabled = false;
                this.b_delete.Enabled = false;
                //this.b_create_trans.Enabled = false;
                this.g_works.Enabled = false;
                break;
                
                case "OLD":
                this._state = "OLD";
                this.Text = "Художник - Просмотр";
                this.update_works_list();
                this.b_delete.Enabled = true;
                //this.b_create_trans.Enabled = true;
                this.b_save.Enabled = false;
                this.l_status.Text = "";
                break;

                case "MOD":
                this._state = "MOD";
                this.Text = "Художник - Редактирование";
                this.b_save.Enabled = true;
                break;
            }
        }

        //Сохранение новой (добавленной) или существующей (измененной) записи -- зависит от состояния
        private void b_save_Click(object sender, EventArgs e)
        {
            if (this.t_name.Text == "")
            {
                MessageBox.Show("Не заполнены обязательные поля!");
                return;
            }
            string result= "";
            
            switch (this._state)
            {
                case "NEW":
                this.l_status.Text = "Добавление нового художника...";
                result = this._data_module.add_artist(this.t_name.Text, this.t_nat.Text,
                                                        this.comb_bd_date.Text, this.comb_dd_date.Text);
                if (result == "OK")
                {
                    this.Dispose();
                }
                else
                {
                    MessageBox.Show("Не удалось добить художника", result);
                }
                break;

                case "MOD":
                this.l_status.Text = "Модификация данных о клиенте.. ";
                result = this._data_module.upd_artist(Convert.ToInt32(this._id), this.t_name.Text, this.t_nat.Text, this.comb_bd_date.Text, this.comb_dd_date.Text);
                break;

                default:
                this.l_status.Text = "Ошибка";
                result = "NDF"; 
                break;

            }

            if (result == "OK")
            {
                if (this._state == "NEW")
                {
                    this.set_state("OLD");
                    this.Dispose();
                }
                else
                    if (this._state == "MOD")
                    {
                        this.set_state("OLD");
                        this.l_status.Text = "Изменение записи успешно завершено";
                    }
            }
            else
            {
                this.l_status.Text = "Ошибка";
                MessageBox.Show(result);
            }

        }

        //Удаление записи
        private void b_delete_Click(object sender, EventArgs e)
        {
            this.l_status.Text = "Удаление записи...";
            string result = this._data_module.del_record_by_id("ARTIST", Convert.ToInt32(this._id));
            if (result == "OK")
            {
                this.l_status.Text = "Запись успешно удалена";
                this.Dispose();
            }
            else
            {
                this.l_status.Text = "Ошибка";
                MessageBox.Show(result);
            }
        }

        //Отмена
        private void b_abolition_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        //Обновить список работ художника
        private void update_works_list()
        {
            ArrayList works;
            works = this._data_module.get_works_by_artist(Convert.ToInt32(this._id));
            if (works != null)
            {
                this.lb_works.Items.Clear();
                foreach (string work in works)
                {
                    lb_works.Items.Add(work);
                }
            }
            else
            {
                MessageBox.Show("Не удалось обновить список работ художника!");
            }
            works.Clear();
        }

        //Закрытие формы редактирования данных художника
        private void form_artist_closed(object sender, FormClosedEventArgs e)
        {
            this.Dispose();
        }

        //Добавление работы художника
        private void b_add_work_Click_1(object sender, EventArgs e)
        {
            class_work work = new class_work();
            work_form work_ = new work_form(this, this._data_module, Convert.ToInt32(this._id), work);
            work_.ShowDialog();
            if (work.title != "")
            {
                this.lb_works.Items.Add(work.title);
            }
        }

        private void form_artist_Load(object sender, EventArgs e)
        {

        }

       
    }
}
